﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Modelo.Entidades;
using Joel.Vishnu.Modelo.Enumeradores;

namespace Joel.Vishnu.SitioWeb
{
    public partial class Productos : System.Web.UI.Page, IProductos
    {

        #region Atributos

        private ProductosPresentador presentador;

        #endregion

        #region Propiedaes

        public Int32 ProductoId
        {
            get { return Convert.ToInt32(lblProductoId.Text); }
        }

        public String Nombre
        {
            get { return  txtNombre.Text; }
        }

        public String Observacion
        {
            get { return txtObservacion.Text; }
        }

        public Decimal PrecioLista
        {
            get { return Convert.ToDecimal(txtPrecioLista.Text.Replace("$","")); }
        }

        public Decimal PrecioDistribuidor
        {
            get { return Convert.ToDecimal(txtPrecioDistribuidor.Text.Replace("$","")); }
        }

        public Int32 ProductoSubCategoriaId
        {
            get { return Convert.ToInt32(ddProductoSubCategoria.SelectedValue); }
        }

        public List<ProductoSubCategoria> ListaProductoSubCategoria
        {
            set
            {
                ddProductoSubCategoria.DataSource = value;
                ddProductoSubCategoria.DataValueField = "Id";
                ddProductoSubCategoria.DataTextField = "Nombre";
                ddProductoSubCategoria.DataBind();
            }
        }

        public EnumEstado Estado
        {
            get
            {
                //TODO: Ver este switch que devuelve el estado del WebForm, la idea es utilizar los EnumEstadoId
                switch (lblEstado.Text)
                {
                    case "0":
                        {
                            return EnumEstado.NUEVO;
                        }
                    case "1":
                        {
                            return EnumEstado.MODIFICAR;
                        }
                    default:
                        {
                            return EnumEstado.ELIMINAR;
                        }
                }
            }
        }

        public List<Producto> ListaProductos
        {
            set
            {
                grdProductos.DataSource = value;
                grdProductos.DataBind();
            }
        }

        #endregion

        #region Metodos

        private void HabilitarControles()
        {
            txtNombre.Enabled = !txtNombre.Enabled;
            txtObservacion.Enabled = !txtObservacion.Enabled;
            txtPrecioDistribuidor.Enabled = !txtPrecioDistribuidor.Enabled;
            txtPrecioLista.Enabled = !txtPrecioLista.Enabled;

            btnInsertar.Enabled = !btnInsertar.Enabled;
            btnModificar.Enabled = !btnModificar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;

            ddProductoSubCategoria.Enabled = !ddProductoSubCategoria.Enabled;

            grdProductos.Enabled = !grdProductos.Enabled;
        }

        private void LimpiarCampos()
        {
            txtNombre.Text = String.Empty;
            txtObservacion.Text = String.Empty;
            txtPrecioDistribuidor.Text = String.Empty;
            txtPrecioLista.Text = String.Empty;
            ddProductoSubCategoria.SelectedIndex = 0;

            grdProductos.SelectedIndex = -1;
        }

        private void ActualizarCampos()
        {
            txtNombre.Text = grdProductos.SelectedRow.Cells[1].Text;
            txtObservacion.Text = grdProductos.SelectedRow.Cells[2].Text;
            txtPrecioDistribuidor.Text = grdProductos.SelectedRow.Cells[3].Text;
            txtPrecioLista.Text = grdProductos.SelectedRow.Cells[4].Text;
            lblProductoId.Text = grdProductos.SelectedRow.Cells[6].Text;
            lblProductoSubCategoriaId.Text = grdProductos.SelectedRow.Cells[7].Text;

            ddProductoSubCategoria.SelectedValue = presentador.TraerProductoSubCategoriaPorId(Convert.ToInt32(lblProductoSubCategoriaId.Text)).Id.ToString();
        }

        #endregion

        #region Eventos

        protected void Page_Load(Object sender, EventArgs e)
        {
            try
            {
                presentador = new ProductosPresentador(this);
                if (!Page.IsPostBack)
                    presentador.Inicialiar();
                //lblErrores.Text = String.Empty;
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnInsertar_Click(Object sender, EventArgs e)
        {
            lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.NUEVO_ID);
            HabilitarControles();
            LimpiarCampos();
            txtNombre.Focus();
        }

        protected void btnModificar_Click(Object sender, EventArgs e)
        {
            if (grdProductos.SelectedRow != null)
            {
                if (lblProductoId.Text != Convert.ToString((Int32)EnumProductos.PRODUCTO_POR_DEFECTO))
                {
                    try
                    {
                        lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.MODIFICAR_ID);
                        HabilitarControles();
                        txtNombre.Focus();
                    }
                    catch (Exception ex)
                    {
                        lblErrores.Text = ex.Message;
                    }
                }
                else
                    lblErrores.Text = "No puede modificar un producto por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar un producto.";
        }

        protected void btnEliminar_Click(Object sender, EventArgs e)
        {
            if (grdProductos.SelectedRow != null)
            {
                if (lblProductoId.Text != Convert.ToString((Int32)EnumProductos.PRODUCTO_POR_DEFECTO))
                {
                    try
                    {
                        lblEstado.Text = Convert.ToString((Int32)EnumEstadoId.ELIMINAR_ID);
                        presentador.Eliminar();
                        LimpiarCampos();
                        lblErrores.Text = "Producto eliminado.";
                    }
                    catch (Exception ex)
                    {
                        lblErrores.Text = ex.Message;
                    }
                }
                else
                    lblErrores.Text = "No puede eliminar un producto por defecto.";
            }
            else
                lblErrores.Text = "Debe seleccionar un producto.";
        }

        protected void btnAceptar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
                LimpiarCampos();
                switch (lblEstado.Text)
                {
                    case "0":
                        lblErrores.Text = "Producto ingresado.";
                        break;
                    case "1":
                        lblErrores.Text = "Producto modificado.";
                        break;
                }
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnCancelar_Click(Object sender, EventArgs e)
        {
            HabilitarControles();
            LimpiarCampos();
        }

        protected void grdProductos_SelectedIndexChanged(Object sender, EventArgs e)
        {
            if (grdProductos.SelectedIndex != -1)
                ActualizarCampos();
            else
                LimpiarCampos();
        }

        #endregion
    }
}